/*
 * OcurrenciaDeTerminos.h
 *
 *  Created on: 06/11/2013
 *      Author: Miguel
 */

#ifndef OCURRENCIADETERMINOS_H_
#define OCURRENCIADETERMINOS_H_

#include "../Types.h"
#include "../secuential/SecuentialFile.h"
#include "../secuential/SecuentialSort.h"
#include "../../utils/Utils.h"
#include <iostream>

#define OT_EXT "OT"

class IDs : public ISerializable {
public:
	IDs();
	IDs(BigInt idTermino, BigInt idDoc);
	virtual ~IDs();

	IDs& operator=(const IDs& otro);
	bool operator==(const IDs& otro) const;

	void setFrecuencia(BigInt frec);

	BigInt size() const;
	void serialize(ISerializer& serializer) const;
	void unserialize(IUnserializer& unserializer);

	void imprimir();
	BigInt getIdTermino() const;
	BigInt getIdDoc() const;
	BigInt getFrec() const;

private:
	BigInt idTermino;
	BigInt idDoc;
	BigInt frecuencia;
};

class OcurrenciaDeTerminos {
public:
	OcurrenciaDeTerminos(const String& nombrec, int block_size);
	virtual ~OcurrenciaDeTerminos();

	SecuentialFile<IDs> archivo;

	void agregarIDAlDoc(BigInt idTerm, BigInt idDoc);
	bool siguienteID(IDs& sig);

	void crear();
	void abrir();
	void cerrar();
	void eliminar();
	String ordenar();
	void listarOrdenado();

private:
	String path;
	String path_ordenado;

	String nombre;

	//BigInt idDoc;

	static bool compararIDs(void* a, void* b);
};

#endif /* OCURRENCIADETERMINOS_H_ */
